From 62b48cea1da8685b2127dd3478cc05f49414a1e1 Mon Sep 17 00:00:00 2001 From: Carlos Garnacho Date: Tue, 13 Jun 2023 22:52:48 +0200 Subject: [PATCH] gdk/wayland: Ensure device-added/removed emission in GdkSeat We've used to emit these in the GdkDeviceManager, but missed to do this signal emission at the GdkSeat object level. In order to avoid the double emission, trigger one from the other. Forwarded: https://gitlab.gnome.org/GNOME/gtk/-/merge_requests/6049 Origin: 3.24.39, commit:81029b824b39122704a9bd615dc7b03886516843 Gbp-Pq: Name gdk-wayland-Ensure-device-added-removed-emission-in-GdkSe.patch --- gdk/wayland/gdkdevice-wayland.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/gdk/wayland/gdkdevice-wayland.c b/gdk/wayland/gdkdevice-wayland.c index 7e7beac9d1..dd7db81cf1 100644 --- a/gdk/wayland/gdkdevice-wayland.c +++ b/gdk/wayland/gdkdevice-wayland.c @@ -5181,6 +5181,22 @@ init_pointer_data (GdkWaylandPointerData *pointer_data, master); } +static void +device_manager_device_added (GdkDeviceManager *device_manager, + GdkDevice *device, + GdkSeat *seat) +{ + g_signal_emit_by_name (seat, "device-added", device); +} + +static void +device_manager_device_removed (GdkDeviceManager *device_manager, + GdkDevice *device, + GdkSeat *seat) +{ + g_signal_emit_by_name (seat, "device-removed", device); +} + void _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager, guint32 id, @@ -5249,6 +5265,11 @@ _gdk_wayland_device_manager_add_seat (GdkDeviceManager *device_manager, seat); } + g_signal_connect (seat->device_manager, "device-added", + G_CALLBACK (device_manager_device_added), seat); + g_signal_connect (seat->device_manager, "device-removed", + G_CALLBACK (device_manager_device_removed), seat); + gdk_display_add_seat (display, GDK_SEAT (seat)); } @@ -5268,6 +5289,12 @@ _gdk_wayland_device_manager_remove_seat (GdkDeviceManager *manager, if (seat->id != id) continue; + g_signal_handlers_disconnect_by_func (manager, + device_manager_device_added, + seat); + g_signal_handlers_disconnect_by_func (manager, + device_manager_device_removed, + seat); gdk_display_remove_seat (display, GDK_SEAT (seat)); break; } -- 2.30.2